const express = require('express');
const router = express.Router();
const multer = require('multer');
const path = require('path');
const fs = require('fs');
const { protect } = require('../middleware/auth'); // 保护接口，需登录
const Detection = require('../models/Detection');

// 配置multer：指定图片存储路径和文件名
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    // 确保uploads文件夹存在，不存在则创建
    const uploadDir = path.join(__dirname, '..', process.env.UPLOAD_FOLDER);
    if (!fs.existsSync(uploadDir)) {
      fs.mkdirSync(uploadDir, { recursive: true });
    }
    cb(null, uploadDir);
  },
  filename: (req, file, cb) => {
    // 生成唯一文件名（避免重复）：时间戳+原始文件名
    const uniqueName = `${Date.now()}-${file.originalname}`;
    cb(null, uniqueName);
  }
});

// 限制上传文件类型（只允许图片）
const fileFilter = (req, file, cb) => {
  if (file.mimetype.startsWith('image/')) {
    cb(null, true); // 允许上传
  } else {
    cb(new Error('只允许上传图片文件'), false); // 拒绝上传
  }
};

// 初始化multer
const upload = multer({
  storage: storage,
  fileFilter: fileFilter,
  limits: { fileSize: 5 * 1024 * 1024 } // 限制文件大小（5MB）
});

// 1. 上传图片并检测（核心接口）
// 接口地址：http://localhost:5000/api/detection/upload
router.post(
  '/upload',
  protect, // 必须登录才能检测
  upload.single('image'), // 接收名为image的文件
  async (req, res) => {
    try {
      // 1. 获取上传的图片信息
      const file = req.file;
      if (!file) {
        return res.status(400).json({
          code: 400,
          message: '请上传图片',
          data: null
        });
      }

      // 2. 调用病害检测模型（这里用模拟结果，实际项目需替换为真实模型）
      // 实际开发中，这里会调用AI模型（如TensorFlow/PyTorch训练的模型）
      const mockDetectionResult = {
        diseaseName: '番茄早疫病', // 模拟检测结果
        confidence: 92.5 // 模拟置信度
      };

      // 3. 保存检测记录到数据库
      const detectionRecord = await Detection.create({
        user: req.user._id, // 当前登录用户ID（从req.user获取）
        imagePath: file.filename, // 存储图片文件名
        diseaseName: mockDetectionResult.diseaseName,
        confidence: mockDetectionResult.confidence
      });

      // 4. 返回检测结果
      res.status(200).json({
        code: 200,
        message: '检测成功',
        data: {
          detectionId: detectionRecord._id,
          diseaseName: mockDetectionResult.diseaseName,
          confidence: mockDetectionResult.confidence,
          imageUrl: `/uploads/${file.filename}` // 前端可通过该路径访问图片
        }
      });

    } catch (error) {
      console.error('检测接口错误：', error);
      res.status(500).json({
        code: 500,
        message: '检测失败，请重试',
        data: null
      });
    }
  }
);

// 2. 获取用户的检测历史记录
// 接口地址：http://localhost:5000/api/detection/history
router.get('/history', protect, async (req, res) => {
  try {
    // 查询当前用户的所有检测记录（按时间倒序）
    const history = await Detection.find({ user: req.user._id })
      .sort({ createdAt: -1 }) // 最新的在前
      .limit(10); // 限制返回10条

    res.status(200).json({
      code: 200,
      message: '获取历史记录成功',
      data: history
    });
  } catch (error) {
    console.error('获取历史记录错误：', error);
    res.status(500).json({
      code: 500,
      message: '获取历史记录失败',
      data: null
    });
  }
});

module.exports = router;